﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using vudu.Logica.Clases;

namespace vudu.EnlaceDatos.SqlServer
{
    /// <summary>
    /// Clase que contiene los metodos basicos para el caso de uso de gestionar evaluacion
    /// (Agregar,Modificar,Eliminar,Consultar)
    /// </summary>
    public class SqlServerHorarioEstudiante
    {

        /// <summary>
        /// Este metodo consulta en base de datos los esquemas de evaluacion de un estudiante.
        /// </summary>
        /// <param name="estudiante">informacion del estudiante que se le va a consultar los esquemas de evaluacion</param>
        /// <returns>Retorna una lista con los esquemas de evaluacion del estudiante.</returns>
        public List<SeccionMateria> ConsultarSeccionesEstudiante(Estudiante estudiante)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNombreMateriasEstudiante]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idEstudiante", estudiante.IdEst);
                command.Parameters["@idEstudiante"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<SeccionMateria> materiasEstudiante = new List<SeccionMateria>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    SeccionMateria seccionMateria = new SeccionMateria();
                    seccionMateria.Materia.Nombre = reader.GetString(0);
                    seccionMateria.IdSeccionMateria = reader.GetInt32(1);
                    seccionMateria.Codigo = reader.GetInt32(2);
                    
                    materiasEstudiante.Add(seccionMateria);

                }
                return materiasEstudiante;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<Practica> ConsultarSeccionesPracticaEstudiante(Estudiante estudiante)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarNombrePracticasEstudiante]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idEstudiante", estudiante.IdEst);
                command.Parameters["@idEstudiante"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<Practica> materiasEstudiante = new List<Practica>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Practica seccionPractica = new Practica();
                    seccionPractica.NombrePractica = reader.GetString(0);
                    seccionPractica.IdPractica = reader.GetInt32(1);
                    seccionPractica.NumeroSeccion = reader.GetInt32(2);

                    materiasEstudiante.Add(seccionPractica);

                }
                return materiasEstudiante;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<HorarioDeClase> ConsultarHorarioSeccionEstudiante(SeccionMateria seccion)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarHorarioMateriasEstudiante]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                
                command.Parameters.AddWithValue("@idSeccion", seccion.IdSeccionMateria);
                command.Parameters.AddWithValue("@Nombre", seccion.Materia.Nombre);
                command.Parameters["@idSeccion"].Direction = ParameterDirection.Input;
                command.Parameters["@Nombre"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<HorarioDeClase> horariosEstudiante = new List<HorarioDeClase>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    HorarioDeClase horarioDeClase = new HorarioDeClase();
                    horarioDeClase.SalonDeClase = new Salon();
                    horarioDeClase.Dia = reader.GetString(0);
                    horarioDeClase.HoraInicio = reader.GetDateTime(1);
                    horarioDeClase.HoraFin = reader.GetDateTime(2);
                    horarioDeClase.SalonDeClase.Nombre = reader.GetString(3);

                    horariosEstudiante.Add(horarioDeClase);

                }
                return horariosEstudiante;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public List<HorarioDeClase> ConsultarHorarioPracticaEstudiante(Practica practica)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarHorarioPracticaEstudiante]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.
                
                command.Parameters.AddWithValue("@idPractica", practica.IdPractica);
                command.Parameters.AddWithValue("@Nombre", practica.NombrePractica);
                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;
                command.Parameters["@Nombre"].Direction = ParameterDirection.Input;

                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                List<HorarioDeClase> horariosEstudiante = new List<HorarioDeClase>();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    HorarioDeClase horarioDeClase = new HorarioDeClase();
                    horarioDeClase.SalonDeClase = new Salon();
                    horarioDeClase.Dia = reader.GetString(0);
                    horarioDeClase.HoraInicio = reader.GetDateTime(1);
                    horarioDeClase.HoraFin = reader.GetDateTime(2);
                    horarioDeClase.SalonDeClase.Nombre = reader.GetString(3);

                    horariosEstudiante.Add(horarioDeClase);

                }
                return horariosEstudiante;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        public  String ConsultarNombreUniversidadMateria(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarUniversidadMateria]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idMateria", id);

                command.Parameters["@idMateria"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreUniversidadPractica(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarUniversidadPractica]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idPractica", id);

                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreEscuelaMateria(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosEscuelaMateria]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idMateria", id);

                command.Parameters["@idMateria"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }

        public String ConsultarNombreEscuelaPractica(int id)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarDatosEscuelaPractica]";
                command.CommandTimeout = 10;

                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@idPractica", id);

                command.Parameters["@idPractica"].Direction = ParameterDirection.Input;


                //se ejecuta el comando
                //se carga la informacion consultada en un objeto de tipo Evaluacion
                String Universidad = "";


                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Universidad = reader.GetString(0);

                }


                return Universidad;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }

        }




    }
}